#ifndef __WIZ_BNF_ACTION_REFACTOR_HPP__SHANHAOBO_19800429__
#define __WIZ_BNF_ACTION_REFACTOR_HPP__SHANHAOBO_19800429__

namespace Wiz
{
    namespace BNF
    {
        namespace Action
        {
            namespace RefActor
            {
                template<
                    class ReferenceT,
                    class ActionT
                >
                class Type : public ActionT
                {
                private:
                    ReferenceT& m_Ref;
                public:
                    explicit Type(ReferenceT& Ref) : m_Ref(Ref){}

                    template<typename T2>
                    ::Wiz::Void::Type operator()
                    (
                        T2 const& WIZ_UNUSED(Val)
                    ) const
                    {
                        this->Act(m_Ref);
                    }

                    template<typename IteratorT>
                    ::Wiz::Void::Type operator()
                    (
                        IteratorT const& WIZ_UNUSED(Frst),
                        IteratorT const& WIZ_UNUSED(Lst)
                    ) const
                    {
                        this->Act(m_Ref);
                    }
                };
            } /// end of namespace RefActor
        } /// end of namespace Action
    } /// end of namespace BNF
} /// end of namespace Wiz

#endif /*__WIZ_BNF_ACTION_REFACTOR_HPP__SHANHAOBO_19800429__*/
